package hl.leco.colle.set;

import java.util.HashSet;

/**
 * HashSet 存储规则的演示（如何防止重复数据--关键：如何认为是同一个数据）
 * 存储结构：哈希表（数组 + 链表 + 红黑树jdk1.8后新加入的）
 * 存储过程：首先基于 hashCode() 方法计算，得到元素存放位置；
 *          然后判断，如果此位置为空则直接加入，
 *          如果不为空，则调用 equals() 方法，如果返回 true，则认为是重复
 * 即 默认规则：通过 equals() ，如果是内存中同一个对象则不加入
 * 现在的需求：只要 person 的 name,age 一样就视为同一个对象而拒绝加入
 * 解决办法：重写 equals()
 * @author Liu Huan
 */


public class Demo3 {
	public static void main(String[] args) {
		//0、创建对象
		HashSet<Person> persons = new HashSet<>();
		//1、添加元素
		Person p1 = new Person("刘德华", 22);
		Person p2 = new Person("周润发", 25);
		Person p3 = new Person("梁朝伟", 18);
		persons.add(p1);
		persons.add(p2);
		persons.add(p3);
		//添加失败（因为 p3 与之前的 p3 指向同一个地址）
		persons.add(p3);
		//添加失败（因为 new 的与之前的 p3 的姓名和年龄一样）
		persons.add(new Person("梁朝伟", 18));
		System.out.println("元素个数：" + persons.size());
		System.out.println(persons);
	}
}
